package com.java.softproblem.method1;

/**
 * @author luzhikun
 * @date &{DATE}-9:24
 */

/**
 * 关于同步方法的总结：
 * 1.同步方法同样也用到了同步监视器，只是不需要我们显示的附一个对象。
 * 2.非静态的同步方法，他的同步监视器是：this
 * 3.静态的同步方法，他的同步监视器默认是当前类本身
 */
public class SyscTest3 {
    public static void main(String[] args) {
        Windows windows1 = new Windows("线程一");
        Windows windows2 = new Windows("线程二");
        Windows windows3 = new Windows("线程三");
        windows1.setPriority(Thread.MIN_PRIORITY);
        windows2.setPriority(Thread.NORM_PRIORITY);
        windows3.setPriority(Thread.MAX_PRIORITY);
        windows1.start();
        windows2.start();
        windows3.start();

    }
}

class Windows extends Thread {
    private static int ticket = 1000;

    public Windows(String name) {
        super(name);

    }

    public void run() {
        while (ticket > 0) {
            show();
        }

    }

    public static synchronized void show() {     //同步监视器 ：Windows.class
        //错误的
        //public synchronized void show(){    //因为每次new对象都会

        if (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + "恭喜你买到票了,票号为" + ticket);
            ticket--;
        }
    }
}
